Keras callback

케라스의 fit() 메서드는 callbacks 매개변수를 이용해서 훈련 과정을 제어할 수 있다.
callbacks 매개변수는 keras.callbacks 아래에 있는 콜백 객체의 리스트를 입력으로 받는다.

ModelCheckpoint: 훈련하는 동안 최고의 성능을 내는 가중치를 저장
ModelCheckpoint 콜백은 더 이상 성능이 개선이 되지 않을 때 훈련을 멈추는 EarlyStopping 콜백과 같이 많이 사용된다.

EarlyStopping: 검증 손실을 모니터링 한다. patience 매개변수가 지정한 에포크 횟수 동안 모니터링 지표가 개선되지 않으면 훈련 중지
from tensorflow.keras.callbacks import ModelCheckpoint, EarlyStopping
callback_list=[ModelCheckpoint(filepath='iris-earlystopping.h5', monitor='val_loss'), EarlyStopping(patience=3, restore_best_weights=True)]
검증 손실을 모니터링 하면서(monitor=‘val_loss’) 세번의 에포크(patience=3) 동안 검증 손실 감소하지 않으면 훈련 중지
최상의 모델로 가중치를 복원(restore_best_weights=True)

iris_model 모델의 구조를 추출하여 모델 생성( tf.keras.models.model_from_json() )
model=tf.keras.models.model_from_json(iris_model.to_json())
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
history=model.fit(ds_train, epochs=500, steps_per_epoch=steps_per_epoch, validation_data=ds_test.batch(50), callbacks=callback_list, verbose=0)
graph
import matplotlib.pyplot as plt
hist=history.history
fig=plt.figure(figsize=(12, 5))
ax=fig.add_subplot(1, 2, 1)
ax.plot(hist['loss'], lw=3)
ax.plot(hist['val_loss'], lw=3)
ax.set_title('Loss', size=15)
ax.set_xlabel('Epoch', size=15)
ax.tick_params(axis='both', which='major', labelsize=15)
ax=fig.add_subplot(1, 2, 2)
ax.plot(hist['accuracy'], lw=3)
ax.plot(hist['val_accuracy'], lw=3)
ax.set_title('Accuracy', size=15)
ax.set_xlabel('Epoch', size=15)
ax.tick_params(axis='both', which='major', labelsize=15)
plt.tight_layout()
plt.show()
에포크를 500회 지정했지만, 140번째의 에포크 근처에서 callbacks를 통해서 훈련이 중지되었다.
EarlyStopping 객체의 stopped_epoch 속성에 몇 번째 에포크에서 멈쳤는지 저장 
callback_list[1].stopped_epoch

146